//
// Created by 34158 on 2024/5/29.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Size 5;//顺序表元素的个数

typedef struct Table{
    int *head;//存储空间的基地址
    int length;//当前长度
    int size;
}Table;
//初始化顺序表
Table initTable(){
    Table t;//结构体变量t
    t.head = malloc(5*sizeof(int));
    //判断开辟空间是否成功
    if(!t.head){
        printf("初始化失败!\n");
        exit(0);
    }
    t.length = 0;
    t.size = Size;
    return t;
}

//打印显示顺序表函数displayTable
void displayTable(Table t){
    for(int i = 0;i<t.length;i++){
        printf("%d",t.head[i]);
    }
    printf("\n");
}
//删除元素方法delTable
Table delTable(Table t,int num){
    //t代表函数调用时传进来的顺序表，num代表要删除的那个数的位置
    if(num>t.length||num<1){
        printf("被删除元素的位置有问题\n");
        return t;
    }
    //当删除元素位置有问题则执行下面代码
    for(int i=num;i<=t.length;i++){
        t.head[i-1]=t.head[i];
    }
    t.length--;
    return t;
}
//插入元素
Table addTable(Table t, int num1,int num2) {
    if(t.head>t.size){
        t.head = realloc(t.head,(t.size+1)*sizeof(int));
        if(!t.head){
            printf("空间分配失败!\n");
            exit(0);
        }
        t.size++;
    }
    for(int i=t.length-1;i>=num1-1;i--){
        t.head[i+1]=t.head[i];
    }
    t.head[num1-1]=num2;
    t.length++;
    return t;
}
//查找元素
void lookTable(Table t , int num){
    for (int i = 0; i < t.length; i++) {
        if(t.head[i]==num){
            printf("元素在第%d个\n",i+1);
        }
    }
}
//修改元素
Table revTable(Table t,int num1,int num2){
    if(num1>t.length||num1<1){
        printf("被删除元素的位置有问题\n");
        return t;
    }
    for (int i = 0; i < t.length; i++) {
        if(i==num1-1){
            t.head[i]=num2;
        }
    }
    return t;
}
int main(){
    Table  t1 = initTable();
    for(int i=0;i<5;i++){
        t1.head[i]=i;
        t1.length++;
    }
    printf("打印原数据表：\n");
    //打印原顺序表
    displayTable(t1);
    //删除元素
    printf("删除元素位置：\n");
    int num;
    fflush(stdout);
    scanf("%d",&num);
    t1 = delTable(t1,num);
    displayTable(t1);
    //插入元素
    t1 = addTable(t1, 2 ,3);
    displayTable(t1);
    //查找元素
    lookTable(t1,4);
    //修改元素
    t1 = revTable(t1,1,3);
    printf("修改后的数据为：\n");
    displayTable(t1);
}